package com.gitee.deeround.jdbchelper.core.dialect;

import com.gitee.deeround.jdbchelper.out.DbColumn;
import com.gitee.deeround.jdbchelper.out.DbTable;

import java.util.List;

/**
 * 方言ddl
 *
 * @author https://gitee.com/deeround
 * @date 2024/04/02
 */
public interface DialectDdl {


    /**
     * 获取表字段
     *
     * @param tableName 表名称
     * @return {@link String}
     */
    String getTableColumn(String tableName);

    /**
     * 匹配表是否存在
     *
     * @param tableName 表名称
     * @return {@link String}
     */
    String existsTable(String tableName);

    /**
     * 匹配表字段是否存在
     *
     * @param tableName  表名称
     * @param columnName 列名
     * @return {@link String}
     */
    String existsTableColumn(String tableName, String columnName);

    /**
     * 创建表
     *
     * @param dbTable db表
     * @return {@link List}<{@link String}>
     */
    List<String> createTable(DbTable dbTable);

    /**
     * 修改表注释
     *
     * @param tableName    表名称
     * @param tableComment 表注释
     * @return {@link List}<{@link String}>
     */
    List<String> modifyTableComment(String tableName, String tableComment);

    /**
     * 修改表名
     *
     * @param oldTableName 旧表名
     * @param newTableName 新表名
     * @param tableComment 表注释
     * @return {@link List}<{@link String}>
     */
    List<String> modifyTableName(String oldTableName, String newTableName, String tableComment);

    /**
     * 删除表
     *
     * @param tableName 表名称
     * @return {@link List}<{@link String}>
     */
    List<String> dropTable(String tableName);

    /**
     * 复制表结构
     *
     * @param tableName    表名称
     * @param newTableName 新表名
     * @return {@link List}<{@link String}>
     */
    List<String> copyTable(String tableName, String newTableName);

    /**
     * 添加表字段
     *
     * @param dbColumn db列
     * @return {@link List}<{@link String}>
     */
    List<String> addTableColumn(DbColumn dbColumn);

    /**
     * 修改表字段修改
     *
     * @param dbColumn db列
     * @return {@link List}<{@link String}>
     */
    List<String> modifyTableColumn(DbColumn dbColumn);


    /**
     * 删除表字段
     *
     * @param tableName  表名称
     * @param columnName 字段名称
     * @return {@link List}<{@link String}>
     */
    List<String> removeTableColumn(String tableName, String columnName);

}
